package org.harsh.transmission.service;

import cn.hutool.core.lang.Pair;
import org.harsh.transmission.domain.TransTask;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 传输任务Service接口
 * @author liuhaibo
 * @date 2024-08-25
 */
public interface ITransTaskService 
{
    /**
     * 查询传输任务
     * 
     * @param taskId 传输任务主键
     * @return 传输任务
     */
    public TransTask selectTransTaskByTaskId(Long taskId);

    /**
     *
     * @param msgId
     * @param nodeId
     * @return
     */
    public TransTask selectTransTaskByMsgNodeId(Long msgId, long nodeId);

    /**
     * 查询传输任务状态列表
     * @param msgIdSet 消息编号集合
     * @return 传输任务状态集合
     */
    public List<Pair<Integer,Integer>> selectTaskStatusListByMsgIdSet(List<Integer> msgIdSet);

    /**
     * 查询指定数量未传输任务
     * @param size
     * @return
     */
    public List<TransTask> selectUnTransTask(int size);

    List<TransTask> selectUnuniTransTask(int size);

    TransTask selectTransTaskByMsgId(Long msgId);

    List<TransTask> selectUnTransTask(long recvNode, int size);

    List<TransTask> selectUnTransOtherTypeTask(int size);

    
    /**
     * 查询传输任务列表
     * 
     * @param transTask 传输任务
     * @return 传输任务集合
     */
    public List<TransTask> selectTransTaskList(TransTask transTask);

    /**
     * 新增传输任务
     * 
     * @param transTask 传输任务
     * @return 结果
     */
    public int insertTransTask(TransTask transTask);

    /**
     * 修改传输任务
     * 
     * @param transTask 传输任务
     * @return 结果
     */
    public int updateTransTask(TransTask transTask);

    /**
     * 设置传输成功
     * @param msgId
     * @return
     */
    public int setTransSuccess(long msgId);


    /**
     * 设置传输成功
     * @param msgId
     * @param nodeId
     * @return
     */
    public int setTransSuccess(long msgId, long nodeId);
    /**
     * 批量删除传输任务
     * 
     * @param taskIds 需要删除的传输任务主键集合
     * @return 结果
     */
    public int deleteTransTaskByTaskIds(String taskIds);

    /**
     * 删除传输任务信息
     * 
     * @param taskId 传输任务主键
     * @return 结果
     */
    public int deleteTransTaskByTaskId(Long taskId);
}
